// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google+ Domains API Version v1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://developers.google.com/+/domains/'>Google+ Domains API</a>
 *      <tr><th>API Version<td>v1
 *      <tr><th>API Rev<td>20170320 (809)
 *      <tr><th>API Docs
 *          <td><a href='https://developers.google.com/+/domains/'>
 *              https://developers.google.com/+/domains/</a>
 *      <tr><th>Discovery Name<td>plusDomains
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google+ Domains API can be found at
 * <a href='https://developers.google.com/+/domains/'>https://developers.google.com/+/domains/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.PlusDomains.v1
{
    /// <summary>The PlusDomains Service.</summary>
    public class PlusDomainsService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public PlusDomainsService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public PlusDomainsService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            activities = new ActivitiesResource(this);
            audiences = new AudiencesResource(this);
            circles = new CirclesResource(this);
            comments = new CommentsResource(this);
            media = new MediaResource(this);
            people = new PeopleResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "plusDomains"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://www.googleapis.com/plusDomains/v1/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return "plusDomains/v1/"; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google+ Domains API.</summary>
        public class Scope
        {
            /// <summary>View your circles and the people and pages in them</summary>
            public static string PlusCirclesRead = "https://www.googleapis.com/auth/plus.circles.read";

            /// <summary>Manage your circles and add people and pages. People and pages you add to your circles will be
            /// notified. Others may see this information publicly. People you add to circles can use Hangouts with
            /// you.</summary>
            public static string PlusCirclesWrite = "https://www.googleapis.com/auth/plus.circles.write";

            /// <summary>Know the list of people in your circles, your age range, and language</summary>
            public static string PlusLogin = "https://www.googleapis.com/auth/plus.login";

            /// <summary>Know who you are on Google</summary>
            public static string PlusMe = "https://www.googleapis.com/auth/plus.me";

            /// <summary>Send your photos and videos to Google+</summary>
            public static string PlusMediaUpload = "https://www.googleapis.com/auth/plus.media.upload";

            /// <summary>View your own Google+ profile and profiles visible to you</summary>
            public static string PlusProfilesRead = "https://www.googleapis.com/auth/plus.profiles.read";

            /// <summary>View your Google+ posts, comments, and stream</summary>
            public static string PlusStreamRead = "https://www.googleapis.com/auth/plus.stream.read";

            /// <summary>Manage your Google+ posts, comments, and stream</summary>
            public static string PlusStreamWrite = "https://www.googleapis.com/auth/plus.stream.write";

            /// <summary>View your email address</summary>
            public static string UserinfoEmail = "https://www.googleapis.com/auth/userinfo.email";

            /// <summary>View your basic profile info</summary>
            public static string UserinfoProfile = "https://www.googleapis.com/auth/userinfo.profile";

        }



        private readonly ActivitiesResource activities;

        /// <summary>Gets the Activities resource.</summary>
        public virtual ActivitiesResource Activities
        {
            get { return activities; }
        }

        private readonly AudiencesResource audiences;

        /// <summary>Gets the Audiences resource.</summary>
        public virtual AudiencesResource Audiences
        {
            get { return audiences; }
        }

        private readonly CirclesResource circles;

        /// <summary>Gets the Circles resource.</summary>
        public virtual CirclesResource Circles
        {
            get { return circles; }
        }

        private readonly CommentsResource comments;

        /// <summary>Gets the Comments resource.</summary>
        public virtual CommentsResource Comments
        {
            get { return comments; }
        }

        private readonly MediaResource media;

        /// <summary>Gets the Media resource.</summary>
        public virtual MediaResource Media
        {
            get { return media; }
        }

        private readonly PeopleResource people;

        /// <summary>Gets the People resource.</summary>
        public virtual PeopleResource People
        {
            get { return people; }
        }
    }

    ///<summary>A base abstract class for PlusDomains requests.</summary>
    public abstract class PlusDomainsBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new PlusDomainsBaseServiceRequest instance.</summary>
        protected PlusDomainsBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>Data format for the response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for the response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
        }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
        /// limits.</summary>
        [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UserIp { get; set; }

        /// <summary>Initializes PlusDomains parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "userIp", new Google.Apis.Discovery.Parameter
                {
                    Name = "userIp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "activities" collection of methods.</summary>
    public class ActivitiesResource
    {
        private const string Resource = "activities";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ActivitiesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Get an activity.</summary>
        /// <param name="activityId">The ID of the activity to get.</param>
        public virtual GetRequest Get(string activityId)
        {
            return new GetRequest(service, activityId);
        }

        /// <summary>Get an activity.</summary>
        public class GetRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Activity>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string activityId)
                : base(service)
            {
                ActivityId = activityId;
                InitParameters();
            }


            /// <summary>The ID of the activity to get.</summary>
            [Google.Apis.Util.RequestParameterAttribute("activityId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ActivityId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "activities/{activityId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "activityId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "activityId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Create a new activity for the authenticated user.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="userId">The ID of the user to create the activity on behalf of. Its value should be "me", to indicate
        /// the authenticated user.</param>
        public virtual InsertRequest Insert(Google.Apis.PlusDomains.v1.Data.Activity body, string userId)
        {
            return new InsertRequest(service, body, userId);
        }

        /// <summary>Create a new activity for the authenticated user.</summary>
        public class InsertRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Activity>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.PlusDomains.v1.Data.Activity body, string userId)
                : base(service)
            {
                UserId = userId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the user to create the activity on behalf of. Its value should be "me", to indicate
            /// the authenticated user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }

            /// <summary>If "true", extract the potential media attachments for a URL. The response will include all
            /// possible attachments for a URL, including video, photos, and articles based on the content of the
            /// page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("preview", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Preview { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.PlusDomains.v1.Data.Activity Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "people/{userId}/activities"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "preview", new Google.Apis.Discovery.Parameter
                    {
                        Name = "preview",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>List all of the activities in the specified collection for a particular user.</summary>
        /// <param name="userId">The ID of the user to get activities for. The special value "me" can be used to indicate the
        /// authenticated user.</param>
        /// <param name="collection">The collection of activities to list.</param>
        public virtual ListRequest List(string userId, ListRequest.CollectionEnum collection)
        {
            return new ListRequest(service, userId, collection);
        }

        /// <summary>List all of the activities in the specified collection for a particular user.</summary>
        public class ListRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.ActivityFeed>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string userId, ListRequest.CollectionEnum collection)
                : base(service)
            {
                UserId = userId;
                Collection = collection;
                InitParameters();
            }


            /// <summary>The ID of the user to get activities for. The special value "me" can be used to indicate the
            /// authenticated user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }

            /// <summary>The collection of activities to list.</summary>
            [Google.Apis.Util.RequestParameterAttribute("collection", Google.Apis.Util.RequestParameterType.Path)]
            public virtual CollectionEnum Collection { get; private set; }

            /// <summary>The collection of activities to list.</summary>
            public enum CollectionEnum
            {
                /// <summary>All activities created by the specified user that the authenticated user is authorized to
                /// view.</summary>
                [Google.Apis.Util.StringValueAttribute("user")]
                User,
            }

            /// <summary>The maximum number of activities to include in the response, which is used for paging. For any
            /// response, the actual number returned might be less than the specified maxResults.</summary>
            /// [default: 20]
            /// [minimum: 1]
            /// [maximum: 100]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The continuation token, which is used to page through large result sets. To get the next page
            /// of results, set this parameter to the value of "nextPageToken" from the previous response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "people/{userId}/activities/{collection}"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "collection", new Google.Apis.Discovery.Parameter
                    {
                        Name = "collection",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "20",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "audiences" collection of methods.</summary>
    public class AudiencesResource
    {
        private const string Resource = "audiences";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public AudiencesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>List all of the audiences to which a user can share.</summary>
        /// <param name="userId">The ID of the user to get audiences for. The special value "me" can be used to indicate the
        /// authenticated user.</param>
        public virtual ListRequest List(string userId)
        {
            return new ListRequest(service, userId);
        }

        /// <summary>List all of the audiences to which a user can share.</summary>
        public class ListRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.AudiencesFeed>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string userId)
                : base(service)
            {
                UserId = userId;
                InitParameters();
            }


            /// <summary>The ID of the user to get audiences for. The special value "me" can be used to indicate the
            /// authenticated user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }

            /// <summary>The maximum number of circles to include in the response, which is used for paging. For any
            /// response, the actual number returned might be less than the specified maxResults.</summary>
            /// [default: 20]
            /// [minimum: 1]
            /// [maximum: 100]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The continuation token, which is used to page through large result sets. To get the next page
            /// of results, set this parameter to the value of "nextPageToken" from the previous response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "people/{userId}/audiences"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "20",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "circles" collection of methods.</summary>
    public class CirclesResource
    {
        private const string Resource = "circles";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public CirclesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Add a person to a circle. Google+ limits certain circle operations, including the number of circle
        /// adds. Learn More.</summary>
        /// <param name="circleId">The ID of the circle to add the person to.</param>
        public virtual AddPeopleRequest AddPeople(string circleId)
        {
            return new AddPeopleRequest(service, circleId);
        }

        /// <summary>Add a person to a circle. Google+ limits certain circle operations, including the number of circle
        /// adds. Learn More.</summary>
        public class AddPeopleRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Circle>
        {
            /// <summary>Constructs a new AddPeople request.</summary>
            public AddPeopleRequest(Google.Apis.Services.IClientService service, string circleId)
                : base(service)
            {
                CircleId = circleId;
                InitParameters();
            }


            /// <summary>The ID of the circle to add the person to.</summary>
            [Google.Apis.Util.RequestParameterAttribute("circleId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CircleId { get; private set; }

            /// <summary>Email of the people to add to the circle. Optional, can be repeated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("email", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> Email { get; set; }

            /// <summary>IDs of the people to add to the circle. Optional, can be repeated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> UserId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "addPeople"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "circles/{circleId}/people"; }
            }

            /// <summary>Initializes AddPeople parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "circleId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "circleId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "email", new Google.Apis.Discovery.Parameter
                    {
                        Name = "email",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Get a circle.</summary>
        /// <param name="circleId">The ID of the circle to get.</param>
        public virtual GetRequest Get(string circleId)
        {
            return new GetRequest(service, circleId);
        }

        /// <summary>Get a circle.</summary>
        public class GetRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Circle>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string circleId)
                : base(service)
            {
                CircleId = circleId;
                InitParameters();
            }


            /// <summary>The ID of the circle to get.</summary>
            [Google.Apis.Util.RequestParameterAttribute("circleId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CircleId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "circles/{circleId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "circleId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "circleId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Create a new circle for the authenticated user.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="userId">The ID of the user to create the circle on behalf of. The value "me" can be used to indicate
        /// the authenticated user.</param>
        public virtual InsertRequest Insert(Google.Apis.PlusDomains.v1.Data.Circle body, string userId)
        {
            return new InsertRequest(service, body, userId);
        }

        /// <summary>Create a new circle for the authenticated user.</summary>
        public class InsertRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Circle>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.PlusDomains.v1.Data.Circle body, string userId)
                : base(service)
            {
                UserId = userId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the user to create the circle on behalf of. The value "me" can be used to indicate
            /// the authenticated user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.PlusDomains.v1.Data.Circle Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "people/{userId}/circles"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>List all of the circles for a user.</summary>
        /// <param name="userId">The ID of the user to get circles for. The special value "me" can be used to indicate the
        /// authenticated user.</param>
        public virtual ListRequest List(string userId)
        {
            return new ListRequest(service, userId);
        }

        /// <summary>List all of the circles for a user.</summary>
        public class ListRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.CircleFeed>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string userId)
                : base(service)
            {
                UserId = userId;
                InitParameters();
            }


            /// <summary>The ID of the user to get circles for. The special value "me" can be used to indicate the
            /// authenticated user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }

            /// <summary>The maximum number of circles to include in the response, which is used for paging. For any
            /// response, the actual number returned might be less than the specified maxResults.</summary>
            /// [default: 20]
            /// [minimum: 1]
            /// [maximum: 100]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The continuation token, which is used to page through large result sets. To get the next page
            /// of results, set this parameter to the value of "nextPageToken" from the previous response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "people/{userId}/circles"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "20",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Update a circle's description. This method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="circleId">The ID of the circle to update.</param>
        public virtual PatchRequest Patch(Google.Apis.PlusDomains.v1.Data.Circle body, string circleId)
        {
            return new PatchRequest(service, body, circleId);
        }

        /// <summary>Update a circle's description. This method supports patch semantics.</summary>
        public class PatchRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Circle>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.PlusDomains.v1.Data.Circle body, string circleId)
                : base(service)
            {
                CircleId = circleId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the circle to update.</summary>
            [Google.Apis.Util.RequestParameterAttribute("circleId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CircleId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.PlusDomains.v1.Data.Circle Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "circles/{circleId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "circleId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "circleId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Delete a circle.</summary>
        /// <param name="circleId">The ID of the circle to delete.</param>
        public virtual RemoveRequest Remove(string circleId)
        {
            return new RemoveRequest(service, circleId);
        }

        /// <summary>Delete a circle.</summary>
        public class RemoveRequest : PlusDomainsBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Remove request.</summary>
            public RemoveRequest(Google.Apis.Services.IClientService service, string circleId)
                : base(service)
            {
                CircleId = circleId;
                InitParameters();
            }


            /// <summary>The ID of the circle to delete.</summary>
            [Google.Apis.Util.RequestParameterAttribute("circleId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CircleId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "remove"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "circles/{circleId}"; }
            }

            /// <summary>Initializes Remove parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "circleId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "circleId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Remove a person from a circle.</summary>
        /// <param name="circleId">The ID of the circle to remove the person from.</param>
        public virtual RemovePeopleRequest RemovePeople(string circleId)
        {
            return new RemovePeopleRequest(service, circleId);
        }

        /// <summary>Remove a person from a circle.</summary>
        public class RemovePeopleRequest : PlusDomainsBaseServiceRequest<string>
        {
            /// <summary>Constructs a new RemovePeople request.</summary>
            public RemovePeopleRequest(Google.Apis.Services.IClientService service, string circleId)
                : base(service)
            {
                CircleId = circleId;
                InitParameters();
            }


            /// <summary>The ID of the circle to remove the person from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("circleId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CircleId { get; private set; }

            /// <summary>Email of the people to add to the circle. Optional, can be repeated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("email", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> Email { get; set; }

            /// <summary>IDs of the people to remove from the circle. Optional, can be repeated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> UserId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "removePeople"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "circles/{circleId}/people"; }
            }

            /// <summary>Initializes RemovePeople parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "circleId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "circleId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "email", new Google.Apis.Discovery.Parameter
                    {
                        Name = "email",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Update a circle's description.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="circleId">The ID of the circle to update.</param>
        public virtual UpdateRequest Update(Google.Apis.PlusDomains.v1.Data.Circle body, string circleId)
        {
            return new UpdateRequest(service, body, circleId);
        }

        /// <summary>Update a circle's description.</summary>
        public class UpdateRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Circle>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.PlusDomains.v1.Data.Circle body, string circleId)
                : base(service)
            {
                CircleId = circleId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the circle to update.</summary>
            [Google.Apis.Util.RequestParameterAttribute("circleId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CircleId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.PlusDomains.v1.Data.Circle Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "circles/{circleId}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "circleId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "circleId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "comments" collection of methods.</summary>
    public class CommentsResource
    {
        private const string Resource = "comments";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public CommentsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Get a comment.</summary>
        /// <param name="commentId">The ID of the comment to get.</param>
        public virtual GetRequest Get(string commentId)
        {
            return new GetRequest(service, commentId);
        }

        /// <summary>Get a comment.</summary>
        public class GetRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Comment>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string commentId)
                : base(service)
            {
                CommentId = commentId;
                InitParameters();
            }


            /// <summary>The ID of the comment to get.</summary>
            [Google.Apis.Util.RequestParameterAttribute("commentId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CommentId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "comments/{commentId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "commentId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "commentId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Create a new comment in reply to an activity.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="activityId">The ID of the activity to reply to.</param>
        public virtual InsertRequest Insert(Google.Apis.PlusDomains.v1.Data.Comment body, string activityId)
        {
            return new InsertRequest(service, body, activityId);
        }

        /// <summary>Create a new comment in reply to an activity.</summary>
        public class InsertRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Comment>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.PlusDomains.v1.Data.Comment body, string activityId)
                : base(service)
            {
                ActivityId = activityId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the activity to reply to.</summary>
            [Google.Apis.Util.RequestParameterAttribute("activityId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ActivityId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.PlusDomains.v1.Data.Comment Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "activities/{activityId}/comments"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "activityId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "activityId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>List all of the comments for an activity.</summary>
        /// <param name="activityId">The ID of the activity to get comments for.</param>
        public virtual ListRequest List(string activityId)
        {
            return new ListRequest(service, activityId);
        }

        /// <summary>List all of the comments for an activity.</summary>
        public class ListRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.CommentFeed>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string activityId)
                : base(service)
            {
                ActivityId = activityId;
                InitParameters();
            }


            /// <summary>The ID of the activity to get comments for.</summary>
            [Google.Apis.Util.RequestParameterAttribute("activityId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ActivityId { get; private set; }

            /// <summary>The maximum number of comments to include in the response, which is used for paging. For any
            /// response, the actual number returned might be less than the specified maxResults.</summary>
            /// [default: 20]
            /// [minimum: 0]
            /// [maximum: 500]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The continuation token, which is used to page through large result sets. To get the next page
            /// of results, set this parameter to the value of "nextPageToken" from the previous response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>The order in which to sort the list of comments.</summary>
            /// [default: ascending]
            [Google.Apis.Util.RequestParameterAttribute("sortOrder", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<SortOrderEnum> SortOrder { get; set; }

            /// <summary>The order in which to sort the list of comments.</summary>
            public enum SortOrderEnum
            {
                /// <summary>Sort oldest comments first.</summary>
                [Google.Apis.Util.StringValueAttribute("ascending")]
                Ascending,
                /// <summary>Sort newest comments first.</summary>
                [Google.Apis.Util.StringValueAttribute("descending")]
                Descending,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "activities/{activityId}/comments"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "activityId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "activityId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "20",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "sortOrder", new Google.Apis.Discovery.Parameter
                    {
                        Name = "sortOrder",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "ascending",
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "media" collection of methods.</summary>
    public class MediaResource
    {
        private const string Resource = "media";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public MediaResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Add a new media item to an album. The current upload size limitations are 36MB for a photo and 1GB
        /// for a video. Uploads do not count against quota if photos are less than 2048 pixels on their longest side or
        /// videos are less than 15 minutes in length.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="userId">The ID of the user to create the activity on behalf of.</param>
        /// <param
        /// name="collection"></param>
        public virtual InsertRequest Insert(Google.Apis.PlusDomains.v1.Data.Media body, string userId, InsertRequest.CollectionEnum collection)
        {
            return new InsertRequest(service, body, userId, collection);
        }

        /// <summary>Add a new media item to an album. The current upload size limitations are 36MB for a photo and 1GB
        /// for a video. Uploads do not count against quota if photos are less than 2048 pixels on their longest side or
        /// videos are less than 15 minutes in length.</summary>
        public class InsertRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Media>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.PlusDomains.v1.Data.Media body, string userId, InsertRequest.CollectionEnum collection)
                : base(service)
            {
                UserId = userId;
                Collection = collection;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the user to create the activity on behalf of.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }


            [Google.Apis.Util.RequestParameterAttribute("collection", Google.Apis.Util.RequestParameterType.Path)]
            public virtual CollectionEnum Collection { get; private set; }


            public enum CollectionEnum
            {
                /// <summary>Upload the media to share on Google+.</summary>
                [Google.Apis.Util.StringValueAttribute("cloud")]
                Cloud,
            }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.PlusDomains.v1.Data.Media Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "people/{userId}/media/{collection}"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "collection", new Google.Apis.Discovery.Parameter
                    {
                        Name = "collection",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Add a new media item to an album. The current upload size limitations are 36MB for a photo and 1GB
        /// for a video. Uploads do not count against quota if photos are less than 2048 pixels on their longest side or
        /// videos are less than 15 minutes in length.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="userId">The ID of the user to create the activity on behalf of.</param>
        /// <param
        /// name="collection"></param>
        /// <param name="stream">The stream to upload.</param>
        /// <param name="contentType">The content type of the stream to upload.</param>
        public virtual InsertMediaUpload Insert(Google.Apis.PlusDomains.v1.Data.Media body, string userId, InsertMediaUpload.CollectionEnum collection, System.IO.Stream stream, string contentType)
        {
            return new InsertMediaUpload(service, body, userId, collection, stream, contentType);
        }

        /// <summary>Insert media upload which supports resumable upload.</summary>
        public class InsertMediaUpload : Google.Apis.Upload.ResumableUpload<Google.Apis.PlusDomains.v1.Data.Media, Google.Apis.PlusDomains.v1.Data.Media>
        {

            /// <summary>Data format for the response.</summary>
            /// [default: json]
            [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<AltEnum> Alt { get; set; }

            /// <summary>Data format for the response.</summary>
            public enum AltEnum
            {
                /// <summary>Responses with Content-Type of application/json</summary>
                [Google.Apis.Util.StringValueAttribute("json")]
                Json,
            }

            /// <summary>Selector specifying which fields to include in a partial response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Fields { get; set; }

            /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and
            /// reports. Required unless you provide an OAuth 2.0 token.</summary>
            [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Key { get; set; }

            /// <summary>OAuth 2.0 token for the current user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OauthToken { get; set; }

            /// <summary>Returns response with indentations and line breaks.</summary>
            /// [default: true]
            [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> PrettyPrint { get; set; }

            /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
            /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are
            /// provided.</summary>
            [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string QuotaUser { get; set; }

            /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
            /// limits.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string UserIp { get; set; }


            /// <summary>The ID of the user to create the activity on behalf of.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }


            [Google.Apis.Util.RequestParameterAttribute("collection", Google.Apis.Util.RequestParameterType.Path)]
            public virtual CollectionEnum Collection { get; private set; }


            public enum CollectionEnum
            {
                /// <summary>Upload the media to share on Google+.</summary>
                [Google.Apis.Util.StringValueAttribute("cloud")]
                Cloud,
            }

            /// <summary>Constructs a new Insert media upload instance.</summary>
            public InsertMediaUpload(Google.Apis.Services.IClientService service, Google.Apis.PlusDomains.v1.Data.Media body, string
             userId, InsertMediaUpload.CollectionEnum
             collection, System.IO.Stream stream, string contentType)
                : base(service, string.Format("/{0}/{1}{2}", "upload", service.BasePath, "people/{userId}/media/{collection}"), "POST", stream, contentType)
            {
                UserId = userId;
                Collection = collection;
                Body = body;
            }
        }
    }

    /// <summary>The "people" collection of methods.</summary>
    public class PeopleResource
    {
        private const string Resource = "people";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public PeopleResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Get a person's profile.</summary>
        /// <param name="userId">The ID of the person to get the profile for. The special value "me" can be used to indicate the
        /// authenticated user.</param>
        public virtual GetRequest Get(string userId)
        {
            return new GetRequest(service, userId);
        }

        /// <summary>Get a person's profile.</summary>
        public class GetRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.Person>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string userId)
                : base(service)
            {
                UserId = userId;
                InitParameters();
            }


            /// <summary>The ID of the person to get the profile for. The special value "me" can be used to indicate the
            /// authenticated user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "people/{userId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>List all of the people in the specified collection.</summary>
        /// <param name="userId">Get the collection of people for the person identified. Use "me" to indicate the authenticated
        /// user.</param>
        /// <param name="collection">The collection of people to list.</param>
        public virtual ListRequest List(string userId, ListRequest.CollectionEnum collection)
        {
            return new ListRequest(service, userId, collection);
        }

        /// <summary>List all of the people in the specified collection.</summary>
        public class ListRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.PeopleFeed>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string userId, ListRequest.CollectionEnum collection)
                : base(service)
            {
                UserId = userId;
                Collection = collection;
                InitParameters();
            }


            /// <summary>Get the collection of people for the person identified. Use "me" to indicate the authenticated
            /// user.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }

            /// <summary>The collection of people to list.</summary>
            [Google.Apis.Util.RequestParameterAttribute("collection", Google.Apis.Util.RequestParameterType.Path)]
            public virtual CollectionEnum Collection { get; private set; }

            /// <summary>The collection of people to list.</summary>
            public enum CollectionEnum
            {
                /// <summary>The list of people who this user has added to one or more circles.</summary>
                [Google.Apis.Util.StringValueAttribute("circled")]
                Circled,
            }

            /// <summary>The maximum number of people to include in the response, which is used for paging. For any
            /// response, the actual number returned might be less than the specified maxResults.</summary>
            /// [default: 100]
            /// [minimum: 1]
            /// [maximum: 100]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The order to return people in.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<OrderByEnum> OrderBy { get; set; }

            /// <summary>The order to return people in.</summary>
            public enum OrderByEnum
            {
                /// <summary>Order the people by their display name.</summary>
                [Google.Apis.Util.StringValueAttribute("alphabetical")]
                Alphabetical,
                /// <summary>Order people based on the relevence to the viewer.</summary>
                [Google.Apis.Util.StringValueAttribute("best")]
                Best,
            }

            /// <summary>The continuation token, which is used to page through large result sets. To get the next page
            /// of results, set this parameter to the value of "nextPageToken" from the previous response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "people/{userId}/people/{collection}"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "collection", new Google.Apis.Discovery.Parameter
                    {
                        Name = "collection",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "100",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>List all of the people in the specified collection for a particular activity.</summary>
        /// <param name="activityId">The ID of the activity to get the list of people for.</param>
        /// <param
        /// name="collection">The collection of people to list.</param>
        public virtual ListByActivityRequest ListByActivity(string activityId, ListByActivityRequest.CollectionEnum collection)
        {
            return new ListByActivityRequest(service, activityId, collection);
        }

        /// <summary>List all of the people in the specified collection for a particular activity.</summary>
        public class ListByActivityRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.PeopleFeed>
        {
            /// <summary>Constructs a new ListByActivity request.</summary>
            public ListByActivityRequest(Google.Apis.Services.IClientService service, string activityId, ListByActivityRequest.CollectionEnum collection)
                : base(service)
            {
                ActivityId = activityId;
                Collection = collection;
                InitParameters();
            }


            /// <summary>The ID of the activity to get the list of people for.</summary>
            [Google.Apis.Util.RequestParameterAttribute("activityId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ActivityId { get; private set; }

            /// <summary>The collection of people to list.</summary>
            [Google.Apis.Util.RequestParameterAttribute("collection", Google.Apis.Util.RequestParameterType.Path)]
            public virtual CollectionEnum Collection { get; private set; }

            /// <summary>The collection of people to list.</summary>
            public enum CollectionEnum
            {
                /// <summary>List all people who have +1'd this activity.</summary>
                [Google.Apis.Util.StringValueAttribute("plusoners")]
                Plusoners,
                /// <summary>List all people who have reshared this activity.</summary>
                [Google.Apis.Util.StringValueAttribute("resharers")]
                Resharers,
                /// <summary>List all people who this activity was shared to.</summary>
                [Google.Apis.Util.StringValueAttribute("sharedto")]
                Sharedto,
            }

            /// <summary>The maximum number of people to include in the response, which is used for paging. For any
            /// response, the actual number returned might be less than the specified maxResults.</summary>
            /// [default: 20]
            /// [minimum: 1]
            /// [maximum: 100]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The continuation token, which is used to page through large result sets. To get the next page
            /// of results, set this parameter to the value of "nextPageToken" from the previous response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "listByActivity"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "activities/{activityId}/people/{collection}"; }
            }

            /// <summary>Initializes ListByActivity parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "activityId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "activityId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "collection", new Google.Apis.Discovery.Parameter
                    {
                        Name = "collection",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "20",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>List all of the people who are members of a circle.</summary>
        /// <param name="circleId">The ID of the circle to get the members of.</param>
        public virtual ListByCircleRequest ListByCircle(string circleId)
        {
            return new ListByCircleRequest(service, circleId);
        }

        /// <summary>List all of the people who are members of a circle.</summary>
        public class ListByCircleRequest : PlusDomainsBaseServiceRequest<Google.Apis.PlusDomains.v1.Data.PeopleFeed>
        {
            /// <summary>Constructs a new ListByCircle request.</summary>
            public ListByCircleRequest(Google.Apis.Services.IClientService service, string circleId)
                : base(service)
            {
                CircleId = circleId;
                InitParameters();
            }


            /// <summary>The ID of the circle to get the members of.</summary>
            [Google.Apis.Util.RequestParameterAttribute("circleId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CircleId { get; private set; }

            /// <summary>The maximum number of people to include in the response, which is used for paging. For any
            /// response, the actual number returned might be less than the specified maxResults.</summary>
            /// [default: 20]
            /// [minimum: 1]
            /// [maximum: 100]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The continuation token, which is used to page through large result sets. To get the next page
            /// of results, set this parameter to the value of "nextPageToken" from the previous response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "listByCircle"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "circles/{circleId}/people"; }
            }

            /// <summary>Initializes ListByCircle parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "circleId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "circleId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "20",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }
}

namespace Google.Apis.PlusDomains.v1.Data
{    

    public class Acl : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Description of the access granted, suitable for display.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Whether access is restricted to the domain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("domainRestricted")]
        public virtual System.Nullable<bool> DomainRestricted { get; set; } 

        /// <summary>The list of access entries.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<PlusDomainsAclentryResource> Items { get; set; } 

        /// <summary>Identifies this resource as a collection of access controls. Value: "plus#acl".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class Activity : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Identifies who has access to see this activity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("access")]
        public virtual Acl Access { get; set; } 

        /// <summary>The person who performed this activity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actor")]
        public virtual Activity.ActorData Actor { get; set; } 

        /// <summary>Street address where this activity occurred.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("address")]
        public virtual string Address { get; set; } 

        /// <summary>Additional content added by the person who shared this activity, applicable only when resharing an
        /// activity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("annotation")]
        public virtual string Annotation { get; set; } 

        /// <summary>If this activity is a crosspost from another system, this property specifies the ID of the original
        /// activity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("crosspostSource")]
        public virtual string CrosspostSource { get; set; } 

        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>Latitude and longitude where this activity occurred. Format is latitude followed by longitude,
        /// space separated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("geocode")]
        public virtual string Geocode { get; set; } 

        /// <summary>The ID of this activity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Identifies this resource as an activity. Value: "plus#activity".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The location where this activity occurred.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual Place Location { get; set; } 

        /// <summary>The object of this activity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("object")]
        public virtual Activity.ObjectData Object__ { get; set; } 

        /// <summary>ID of the place where this activity occurred.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("placeId")]
        public virtual string PlaceId { get; set; } 

        /// <summary>Name of the place where this activity occurred.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("placeName")]
        public virtual string PlaceName { get; set; } 

        /// <summary>The service provider that initially published this activity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("provider")]
        public virtual Activity.ProviderData Provider { get; set; } 

        /// <summary>The time at which this activity was initially published. Formatted as an RFC 3339
        /// timestamp.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("published")]
        public virtual string PublishedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="PublishedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Published
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(PublishedRaw);
            }
            set
            {
                PublishedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>Radius, in meters, of the region where this activity occurred, centered at the latitude and
        /// longitude identified in geocode.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("radius")]
        public virtual string Radius { get; set; } 

        /// <summary>Title of this activity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The time at which this activity was last updated. Formatted as an RFC 3339 timestamp.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The link to this activity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>This activity's verb, which indicates the action that was performed. Possible values include, but
        /// are not limited to, the following values: - "post" - Publish content to the stream. - "share" - Reshare an
        /// activity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verb")]
        public virtual string Verb { get; set; } 

        

        /// <summary>The person who performed this activity.</summary>
        public class ActorData
        {
            /// <summary>Actor info specific to particular clients.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("clientSpecificActorInfo")]
            public virtual ActorData.ClientSpecificActorInfoData ClientSpecificActorInfo { get; set; } 

            /// <summary>The name of the actor, suitable for display.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
            public virtual string DisplayName { get; set; } 

            /// <summary>The ID of the actor's Person resource.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

            /// <summary>The image representation of the actor.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("image")]
            public virtual ActorData.ImageData Image { get; set; } 

            /// <summary>An object representation of the individual components of name.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("name")]
            public virtual ActorData.NameData Name { get; set; } 

            /// <summary>The link to the actor's Google profile.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("url")]
            public virtual string Url { get; set; } 

            /// <summary>Verification status of actor.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("verification")]
            public virtual ActorData.VerificationData Verification { get; set; } 

            

            /// <summary>Actor info specific to particular clients.</summary>
            public class ClientSpecificActorInfoData
            {
                /// <summary>Actor info specific to YouTube clients.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("youtubeActorInfo")]
                public virtual ClientSpecificActorInfoData.YoutubeActorInfoData YoutubeActorInfo { get; set; } 

                

                /// <summary>Actor info specific to YouTube clients.</summary>
                public class YoutubeActorInfoData
                {
                    /// <summary>ID of the YouTube channel owned by the Actor.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("channelId")]
                    public virtual string ChannelId { get; set; } 

                }
            }    

            /// <summary>The image representation of the actor.</summary>
            public class ImageData
            {
                /// <summary>The URL of the actor's profile photo. To resize the image and crop it to a square, append
                /// the query string ?sz=x, where x is the dimension in pixels of each side.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("url")]
                public virtual string Url { get; set; } 

            }    

            /// <summary>An object representation of the individual components of name.</summary>
            public class NameData
            {
                /// <summary>The family name ("last name") of the actor.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("familyName")]
                public virtual string FamilyName { get; set; } 

                /// <summary>The given name ("first name") of the actor.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("givenName")]
                public virtual string GivenName { get; set; } 

            }    

            /// <summary>Verification status of actor.</summary>
            public class VerificationData
            {
                /// <summary>Verification for one-time or manual processes.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("adHocVerified")]
                public virtual string AdHocVerified { get; set; } 

            }
        }    

        /// <summary>The object of this activity.</summary>
        public class ObjectData
        {
            /// <summary>If this activity's object is itself another activity, such as when a person reshares an
            /// activity, this property specifies the original activity's actor.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("actor")]
            public virtual ObjectData.ActorData Actor { get; set; } 

            /// <summary>The media objects attached to this activity.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("attachments")]
            public virtual System.Collections.Generic.IList<ObjectData.AttachmentsData> Attachments { get; set; } 

            /// <summary>The HTML-formatted content, which is suitable for display.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("content")]
            public virtual string Content { get; set; } 

            /// <summary>The ID of the object. When resharing an activity, this is the ID of the activity that is being
            /// reshared.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

            /// <summary>The type of the object. Possible values include, but are not limited to, the following values:
            /// - "note" - Textual content. - "activity" - A Google+ activity.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("objectType")]
            public virtual string ObjectType { get; set; } 

            /// <summary>The content (text) as provided by the author, which is stored without any HTML formatting. When
            /// creating or updating an activity, this value must be supplied as plain text in the request.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("originalContent")]
            public virtual string OriginalContent { get; set; } 

            /// <summary>People who +1'd this activity.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("plusoners")]
            public virtual ObjectData.PlusonersData Plusoners { get; set; } 

            /// <summary>Comments in reply to this activity.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("replies")]
            public virtual ObjectData.RepliesData Replies { get; set; } 

            /// <summary>People who reshared this activity.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("resharers")]
            public virtual ObjectData.ResharersData Resharers { get; set; } 

            /// <summary>Status of the activity as seen by the viewer.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("statusForViewer")]
            public virtual ObjectData.StatusForViewerData StatusForViewer { get; set; } 

            /// <summary>The URL that points to the linked resource.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("url")]
            public virtual string Url { get; set; } 

            

            /// <summary>If this activity's object is itself another activity, such as when a person reshares an
            /// activity, this property specifies the original activity's actor.</summary>
            public class ActorData
            {
                /// <summary>Actor info specific to particular clients.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("clientSpecificActorInfo")]
                public virtual ActorData.ClientSpecificActorInfoData ClientSpecificActorInfo { get; set; } 

                /// <summary>The original actor's name, which is suitable for display.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
                public virtual string DisplayName { get; set; } 

                /// <summary>ID of the original actor.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("id")]
                public virtual string Id { get; set; } 

                /// <summary>The image representation of the original actor.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("image")]
                public virtual ActorData.ImageData Image { get; set; } 

                /// <summary>A link to the original actor's Google profile.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("url")]
                public virtual string Url { get; set; } 

                /// <summary>Verification status of actor.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("verification")]
                public virtual ActorData.VerificationData Verification { get; set; } 

                

                /// <summary>Actor info specific to particular clients.</summary>
                public class ClientSpecificActorInfoData
                {
                    /// <summary>Actor info specific to YouTube clients.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("youtubeActorInfo")]
                    public virtual ClientSpecificActorInfoData.YoutubeActorInfoData YoutubeActorInfo { get; set; } 

                    

                    /// <summary>Actor info specific to YouTube clients.</summary>
                    public class YoutubeActorInfoData
                    {
                        /// <summary>ID of the YouTube channel owned by the Actor.</summary>
                        [Newtonsoft.Json.JsonPropertyAttribute("channelId")]
                        public virtual string ChannelId { get; set; } 

                    }
                }    

                /// <summary>The image representation of the original actor.</summary>
                public class ImageData
                {
                    /// <summary>A URL that points to a thumbnail photo of the original actor.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("url")]
                    public virtual string Url { get; set; } 

                }    

                /// <summary>Verification status of actor.</summary>
                public class VerificationData
                {
                    /// <summary>Verification for one-time or manual processes.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("adHocVerified")]
                    public virtual string AdHocVerified { get; set; } 

                }
            }    

            public class AttachmentsData
            {
                /// <summary>If the attachment is an article, this property contains a snippet of text from the article.
                /// It can also include descriptions for other types.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("content")]
                public virtual string Content { get; set; } 

                /// <summary>The title of the attachment, such as a photo caption or an article title.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
                public virtual string DisplayName { get; set; } 

                /// <summary>If the attachment is a video, the embeddable link.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("embed")]
                public virtual AttachmentsData.EmbedData Embed { get; set; } 

                /// <summary>The full image URL for photo attachments.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("fullImage")]
                public virtual AttachmentsData.FullImageData FullImage { get; set; } 

                /// <summary>The ID of the attachment.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("id")]
                public virtual string Id { get; set; } 

                /// <summary>The preview image for photos or videos.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("image")]
                public virtual AttachmentsData.ImageData Image { get; set; } 

                /// <summary>The type of media object. Possible values include, but are not limited to, the following
                /// values: - "photo" - A photo. - "album" - A photo album. - "video" - A video. - "article" - An
                /// article, specified by a link.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("objectType")]
                public virtual string ObjectType { get; set; } 

                /// <summary>When previewing, these are the optional thumbnails for the post. When posting an article,
                /// choose one by setting the attachment.image.url property. If you don't choose one, one will be chosen
                /// for you.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("previewThumbnails")]
                public virtual System.Collections.Generic.IList<AttachmentsData.PreviewThumbnailsData> PreviewThumbnails { get; set; } 

                /// <summary>If the attachment is an album, this property is a list of potential additional thumbnails
                /// from the album.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("thumbnails")]
                public virtual System.Collections.Generic.IList<AttachmentsData.ThumbnailsData> Thumbnails { get; set; } 

                /// <summary>The link to the attachment, which should be of type text/html.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("url")]
                public virtual string Url { get; set; } 

                

                /// <summary>If the attachment is a video, the embeddable link.</summary>
                public class EmbedData
                {
                    /// <summary>Media type of the link.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("type")]
                    public virtual string Type { get; set; } 

                    /// <summary>URL of the link.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("url")]
                    public virtual string Url { get; set; } 

                }    

                /// <summary>The full image URL for photo attachments.</summary>
                public class FullImageData
                {
                    /// <summary>The height, in pixels, of the linked resource.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("height")]
                    public virtual System.Nullable<long> Height { get; set; } 

                    /// <summary>Media type of the link.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("type")]
                    public virtual string Type { get; set; } 

                    /// <summary>URL of the image.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("url")]
                    public virtual string Url { get; set; } 

                    /// <summary>The width, in pixels, of the linked resource.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("width")]
                    public virtual System.Nullable<long> Width { get; set; } 

                }    

                /// <summary>The preview image for photos or videos.</summary>
                public class ImageData
                {
                    /// <summary>The height, in pixels, of the linked resource.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("height")]
                    public virtual System.Nullable<long> Height { get; set; } 

                    /// <summary>Media type of the link.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("type")]
                    public virtual string Type { get; set; } 

                    /// <summary>Image URL.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("url")]
                    public virtual string Url { get; set; } 

                    /// <summary>The width, in pixels, of the linked resource.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("width")]
                    public virtual System.Nullable<long> Width { get; set; } 

                }    

                public class PreviewThumbnailsData
                {
                    /// <summary>URL of the thumbnail image.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("url")]
                    public virtual string Url { get; set; } 

                }    

                public class ThumbnailsData
                {
                    /// <summary>Potential name of the thumbnail.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("description")]
                    public virtual string Description { get; set; } 

                    /// <summary>Image resource.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("image")]
                    public virtual ThumbnailsData.ImageData Image { get; set; } 

                    /// <summary>URL of the webpage containing the image.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("url")]
                    public virtual string Url { get; set; } 

                    

                    /// <summary>Image resource.</summary>
                    public class ImageData
                    {
                        /// <summary>The height, in pixels, of the linked resource.</summary>
                        [Newtonsoft.Json.JsonPropertyAttribute("height")]
                        public virtual System.Nullable<long> Height { get; set; } 

                        /// <summary>Media type of the link.</summary>
                        [Newtonsoft.Json.JsonPropertyAttribute("type")]
                        public virtual string Type { get; set; } 

                        /// <summary>Image url.</summary>
                        [Newtonsoft.Json.JsonPropertyAttribute("url")]
                        public virtual string Url { get; set; } 

                        /// <summary>The width, in pixels, of the linked resource.</summary>
                        [Newtonsoft.Json.JsonPropertyAttribute("width")]
                        public virtual System.Nullable<long> Width { get; set; } 

                    }
                }
            }    

            /// <summary>People who +1'd this activity.</summary>
            public class PlusonersData
            {
                /// <summary>The URL for the collection of people who +1'd this activity.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
                public virtual string SelfLink { get; set; } 

                /// <summary>Total number of people who +1'd this activity.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
                public virtual System.Nullable<long> TotalItems { get; set; } 

            }    

            /// <summary>Comments in reply to this activity.</summary>
            public class RepliesData
            {
                /// <summary>The URL for the collection of comments in reply to this activity.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
                public virtual string SelfLink { get; set; } 

                /// <summary>Total number of comments on this activity.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
                public virtual System.Nullable<long> TotalItems { get; set; } 

            }    

            /// <summary>People who reshared this activity.</summary>
            public class ResharersData
            {
                /// <summary>The URL for the collection of resharers.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
                public virtual string SelfLink { get; set; } 

                /// <summary>Total number of people who reshared this activity.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
                public virtual System.Nullable<long> TotalItems { get; set; } 

            }    

            /// <summary>Status of the activity as seen by the viewer.</summary>
            public class StatusForViewerData
            {
                /// <summary>Whether the viewer can comment on the activity.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("canComment")]
                public virtual System.Nullable<bool> CanComment { get; set; } 

                /// <summary>Whether the viewer can +1 the activity.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("canPlusone")]
                public virtual System.Nullable<bool> CanPlusone { get; set; } 

                /// <summary>Whether the viewer can edit or delete the activity.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("canUpdate")]
                public virtual System.Nullable<bool> CanUpdate { get; set; } 

                /// <summary>Whether the viewer has +1'd the activity.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("isPlusOned")]
                public virtual System.Nullable<bool> IsPlusOned { get; set; } 

                /// <summary>Whether reshares are disabled for the activity.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("resharingDisabled")]
                public virtual System.Nullable<bool> ResharingDisabled { get; set; } 

            }
        }    

        /// <summary>The service provider that initially published this activity.</summary>
        public class ProviderData
        {
            /// <summary>Name of the service provider.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("title")]
            public virtual string Title { get; set; } 

        }
    }    

    public class ActivityFeed : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The ID of this collection of activities. Deprecated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The activities in this page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Activity> Items { get; set; } 

        /// <summary>Identifies this resource as a collection of activities. Value: "plus#activityFeed".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Link to the next page of activities.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextLink")]
        public virtual string NextLink { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>Link to this activity resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The title of this collection of activities, which is a truncated portion of the content.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The time at which this collection of activities was last updated. Formatted as an RFC 3339
        /// timestamp.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

    }    

    public class Audience : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The access control list entry.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("item")]
        public virtual PlusDomainsAclentryResource Item { get; set; } 

        /// <summary>Identifies this resource as an audience. Value: "plus#audience".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The number of people in this circle. This only applies if entity_type is CIRCLE.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("memberCount")]
        public virtual System.Nullable<long> MemberCount { get; set; } 

        /// <summary>The circle members' visibility as chosen by the owner of the circle. This only applies for items
        /// with "item.type" equals "circle". Possible values are: - "public" - Members are visible to the public. -
        /// "limited" - Members are visible to a limited audience. - "private" - Members are visible to the owner
        /// only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("visibility")]
        public virtual string Visibility { get; set; } 

    }    

    public class AudiencesFeed : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The audiences in this result.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Audience> Items { get; set; } 

        /// <summary>Identifies this resource as a collection of audiences. Value: "plus#audienceFeed".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The total number of ACL entries. The number of entries in this response may be smaller due to
        /// paging.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
        public virtual System.Nullable<int> TotalItems { get; set; } 

    }    

    public class Circle : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The description of this circle.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The circle name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The ID of the circle.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Identifies this resource as a circle. Value: "plus#circle".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The people in this circle.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("people")]
        public virtual Circle.PeopleData People { get; set; } 

        /// <summary>Link to this circle resource</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        

        /// <summary>The people in this circle.</summary>
        public class PeopleData
        {
            /// <summary>The total number of people in this circle.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
            public virtual System.Nullable<long> TotalItems { get; set; } 

        }
    }    

    public class CircleFeed : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The circles in this page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Circle> Items { get; set; } 

        /// <summary>Identifies this resource as a collection of circles. Value: "plus#circleFeed".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Link to the next page of circles.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextLink")]
        public virtual string NextLink { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>Link to this page of circles.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The title of this list of resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The total number of circles. The number of circles in this response may be smaller due to
        /// paging.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
        public virtual System.Nullable<int> TotalItems { get; set; } 

    }    

    public class Comment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The person who posted this comment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actor")]
        public virtual Comment.ActorData Actor { get; set; } 

        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The ID of this comment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The activity this comment replied to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inReplyTo")]
        public virtual System.Collections.Generic.IList<Comment.InReplyToData> InReplyTo { get; set; } 

        /// <summary>Identifies this resource as a comment. Value: "plus#comment".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The object of this comment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("object")]
        public virtual Comment.ObjectData Object__ { get; set; } 

        /// <summary>People who +1'd this comment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("plusoners")]
        public virtual Comment.PlusonersData Plusoners { get; set; } 

        /// <summary>The time at which this comment was initially published. Formatted as an RFC 3339
        /// timestamp.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("published")]
        public virtual string PublishedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="PublishedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Published
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(PublishedRaw);
            }
            set
            {
                PublishedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>Link to this comment resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The time at which this comment was last updated. Formatted as an RFC 3339 timestamp.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>This comment's verb, indicating what action was performed. Possible values are: - "post" - Publish
        /// content to the stream.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verb")]
        public virtual string Verb { get; set; } 

        

        /// <summary>The person who posted this comment.</summary>
        public class ActorData
        {
            /// <summary>Actor info specific to particular clients.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("clientSpecificActorInfo")]
            public virtual ActorData.ClientSpecificActorInfoData ClientSpecificActorInfo { get; set; } 

            /// <summary>The name of this actor, suitable for display.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
            public virtual string DisplayName { get; set; } 

            /// <summary>The ID of the actor.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

            /// <summary>The image representation of this actor.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("image")]
            public virtual ActorData.ImageData Image { get; set; } 

            /// <summary>A link to the Person resource for this actor.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("url")]
            public virtual string Url { get; set; } 

            /// <summary>Verification status of actor.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("verification")]
            public virtual ActorData.VerificationData Verification { get; set; } 

            

            /// <summary>Actor info specific to particular clients.</summary>
            public class ClientSpecificActorInfoData
            {
                /// <summary>Actor info specific to YouTube clients.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("youtubeActorInfo")]
                public virtual ClientSpecificActorInfoData.YoutubeActorInfoData YoutubeActorInfo { get; set; } 

                

                /// <summary>Actor info specific to YouTube clients.</summary>
                public class YoutubeActorInfoData
                {
                    /// <summary>ID of the YouTube channel owned by the Actor.</summary>
                    [Newtonsoft.Json.JsonPropertyAttribute("channelId")]
                    public virtual string ChannelId { get; set; } 

                }
            }    

            /// <summary>The image representation of this actor.</summary>
            public class ImageData
            {
                /// <summary>The URL of the actor's profile photo. To resize the image and crop it to a square, append
                /// the query string ?sz=x, where x is the dimension in pixels of each side.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("url")]
                public virtual string Url { get; set; } 

            }    

            /// <summary>Verification status of actor.</summary>
            public class VerificationData
            {
                /// <summary>Verification for one-time or manual processes.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("adHocVerified")]
                public virtual string AdHocVerified { get; set; } 

            }
        }    

        public class InReplyToData
        {
            /// <summary>The ID of the activity.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

            /// <summary>The URL of the activity.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("url")]
            public virtual string Url { get; set; } 

        }    

        /// <summary>The object of this comment.</summary>
        public class ObjectData
        {
            /// <summary>The HTML-formatted content, suitable for display.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("content")]
            public virtual string Content { get; set; } 

            /// <summary>The object type of this comment. Possible values are: - "comment" - A comment in reply to an
            /// activity.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("objectType")]
            public virtual string ObjectType { get; set; } 

            /// <summary>The content (text) as provided by the author, stored without any HTML formatting. When creating
            /// or updating a comment, this value must be supplied as plain text in the request.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("originalContent")]
            public virtual string OriginalContent { get; set; } 

        }    

        /// <summary>People who +1'd this comment.</summary>
        public class PlusonersData
        {
            /// <summary>Total number of people who +1'd this comment.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
            public virtual System.Nullable<long> TotalItems { get; set; } 

        }
    }    

    public class CommentFeed : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The ID of this collection of comments.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The comments in this page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Comment> Items { get; set; } 

        /// <summary>Identifies this resource as a collection of comments. Value: "plus#commentFeed".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Link to the next page of activities.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextLink")]
        public virtual string NextLink { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The title of this collection of comments.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The time at which this collection of comments was last updated. Formatted as an RFC 3339
        /// timestamp.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

    }    

    public class Media : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The person who uploaded this media.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("author")]
        public virtual Media.AuthorData Author { get; set; } 

        /// <summary>The display name for this media.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>Exif information of the media item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("exif")]
        public virtual Media.ExifData Exif { get; set; } 

        /// <summary>The height in pixels of the original image.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("height")]
        public virtual System.Nullable<long> Height { get; set; } 

        /// <summary>ID of this media, which is generated by the API.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The type of resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The time at which this media was originally created in UTC. Formatted as an RFC 3339 timestamp that
        /// matches this example: 2010-11-25T14:30:27.655Z</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mediaCreatedTime")]
        public virtual string MediaCreatedTimeRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="MediaCreatedTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> MediaCreatedTime
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(MediaCreatedTimeRaw);
            }
            set
            {
                MediaCreatedTimeRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The URL of this photo or video's still image.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mediaUrl")]
        public virtual string MediaUrl { get; set; } 

        /// <summary>The time at which this media was uploaded. Formatted as an RFC 3339 timestamp.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("published")]
        public virtual string PublishedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="PublishedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Published
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(PublishedRaw);
            }
            set
            {
                PublishedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The size in bytes of this video.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sizeBytes")]
        public virtual System.Nullable<long> SizeBytes { get; set; } 

        /// <summary>The list of video streams for this video. There might be several different streams available for a
        /// single video, either Flash or MPEG, of various sizes</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streams")]
        public virtual System.Collections.Generic.IList<Videostream> Streams { get; set; } 

        /// <summary>A description, or caption, for this media.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("summary")]
        public virtual string Summary { get; set; } 

        /// <summary>The time at which this media was last updated. This includes changes to media metadata. Formatted
        /// as an RFC 3339 timestamp.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The URL for the page that hosts this media.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>The duration in milliseconds of this video.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("videoDuration")]
        public virtual System.Nullable<long> VideoDuration { get; set; } 

        /// <summary>The encoding status of this video. Possible values are: - "UPLOADING" - Not all the video bytes
        /// have been received. - "PENDING" - Video not yet processed. - "FAILED" - Video processing failed. - "READY" -
        /// A single video stream is playable. - "FINAL" - All video streams are playable.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("videoStatus")]
        public virtual string VideoStatus { get; set; } 

        /// <summary>The width in pixels of the original image.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("width")]
        public virtual System.Nullable<long> Width { get; set; } 

        

        /// <summary>The person who uploaded this media.</summary>
        public class AuthorData
        {
            /// <summary>The author's name.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
            public virtual string DisplayName { get; set; } 

            /// <summary>ID of the author.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

            /// <summary>The author's Google profile image.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("image")]
            public virtual AuthorData.ImageData Image { get; set; } 

            /// <summary>A link to the author's Google profile.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("url")]
            public virtual string Url { get; set; } 

            

            /// <summary>The author's Google profile image.</summary>
            public class ImageData
            {
                /// <summary>The URL of the author's profile photo. To resize the image and crop it to a square, append
                /// the query string ?sz=x, where x is the dimension in pixels of each side.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("url")]
                public virtual string Url { get; set; } 

            }
        }    

        /// <summary>Exif information of the media item.</summary>
        public class ExifData
        {
            /// <summary>The time the media was captured. Formatted as an RFC 3339 timestamp.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("time")]
            public virtual string TimeRaw { get; set; }

            /// <summary><seealso cref="System.DateTime"/> representation of <see cref="TimeRaw"/>.</summary>
            [Newtonsoft.Json.JsonIgnore]
            public virtual System.Nullable<System.DateTime> Time
            {
                get
                {
                    return Google.Apis.Util.Utilities.GetDateTimeFromString(TimeRaw);
                }
                set
                {
                    TimeRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
                }
            }

        }
    }    

    public class PeopleFeed : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The people in this page of results. Each item includes the id, displayName, image, and url for the
        /// person. To retrieve additional profile data, see the people.get method.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Person> Items { get; set; } 

        /// <summary>Identifies this resource as a collection of people. Value: "plus#peopleFeed".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>Link to this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The title of this collection of people.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The total number of people available in this list. The number of people in a response might be
        /// smaller due to paging. This might not be set for all collections.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
        public virtual System.Nullable<int> TotalItems { get; set; } 

    }    

    public class Person : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A short biography for this person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("aboutMe")]
        public virtual string AboutMe { get; set; } 

        /// <summary>The person's date of birth, represented as YYYY-MM-DD.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("birthday")]
        public virtual string Birthday { get; set; } 

        /// <summary>The "bragging rights" line of this person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("braggingRights")]
        public virtual string BraggingRights { get; set; } 

        /// <summary>For followers who are visible, the number of people who have added this person or page to a
        /// circle.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("circledByCount")]
        public virtual System.Nullable<int> CircledByCount { get; set; } 

        /// <summary>The cover photo content.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cover")]
        public virtual Person.CoverData Cover { get; set; } 

        /// <summary>(this field is not currently used)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currentLocation")]
        public virtual string CurrentLocation { get; set; } 

        /// <summary>The name of this person, which is suitable for display.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>The hosted domain name for the user's Google Apps account. For instance, example.com. The
        /// plus.profile.emails.read or email scope is needed to get this domain name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("domain")]
        public virtual string Domain { get; set; } 

        /// <summary>A list of email addresses that this person has, including their Google account email address, and
        /// the public verified email addresses on their Google+ profile. The plus.profile.emails.read scope is needed
        /// to retrieve these email addresses, or the email scope can be used to retrieve just the Google account email
        /// address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("emails")]
        public virtual System.Collections.Generic.IList<Person.EmailsData> Emails { get; set; } 

        /// <summary>ETag of this response for caching purposes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The person's gender. Possible values include, but are not limited to, the following values: -
        /// "male" - Male gender. - "female" - Female gender. - "other" - Other.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gender")]
        public virtual string Gender { get; set; } 

        /// <summary>The ID of this person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The representation of the person's profile photo.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("image")]
        public virtual Person.ImageData Image { get; set; } 

        /// <summary>Whether this user has signed up for Google+.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isPlusUser")]
        public virtual System.Nullable<bool> IsPlusUser { get; set; } 

        /// <summary>Identifies this resource as a person. Value: "plus#person".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>An object representation of the individual components of a person's name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual Person.NameData Name { get; set; } 

        /// <summary>The nickname of this person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nickname")]
        public virtual string Nickname { get; set; } 

        /// <summary>Type of person within Google+. Possible values include, but are not limited to, the following
        /// values: - "person" - represents an actual person. - "page" - represents a page.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("objectType")]
        public virtual string ObjectType { get; set; } 

        /// <summary>The occupation of this person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("occupation")]
        public virtual string Occupation { get; set; } 

        /// <summary>A list of current or past organizations with which this person is associated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("organizations")]
        public virtual System.Collections.Generic.IList<Person.OrganizationsData> Organizations { get; set; } 

        /// <summary>A list of places where this person has lived.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("placesLived")]
        public virtual System.Collections.Generic.IList<Person.PlacesLivedData> PlacesLived { get; set; } 

        /// <summary>If a Google+ Page, the number of people who have +1'd this page.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("plusOneCount")]
        public virtual System.Nullable<int> PlusOneCount { get; set; } 

        /// <summary>The person's relationship status. Possible values include, but are not limited to, the following
        /// values: - "single" - Person is single. - "in_a_relationship" - Person is in a relationship. - "engaged" -
        /// Person is engaged. - "married" - Person is married. - "its_complicated" - The relationship is complicated. -
        /// "open_relationship" - Person is in an open relationship. - "widowed" - Person is widowed. -
        /// "in_domestic_partnership" - Person is in a domestic partnership. - "in_civil_union" - Person is in a civil
        /// union.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("relationshipStatus")]
        public virtual string RelationshipStatus { get; set; } 

        /// <summary>The person's skills.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("skills")]
        public virtual string Skills { get; set; } 

        /// <summary>The brief description (tagline) of this person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tagline")]
        public virtual string Tagline { get; set; } 

        /// <summary>The URL of this person's profile.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>A list of URLs for this person.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("urls")]
        public virtual System.Collections.Generic.IList<Person.UrlsData> Urls { get; set; } 

        /// <summary>Whether the person or Google+ Page has been verified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verified")]
        public virtual System.Nullable<bool> Verified { get; set; } 

        

        /// <summary>The cover photo content.</summary>
        public class CoverData
        {
            /// <summary>Extra information about the cover photo.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("coverInfo")]
            public virtual CoverData.CoverInfoData CoverInfo { get; set; } 

            /// <summary>The person's primary cover image.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("coverPhoto")]
            public virtual CoverData.CoverPhotoData CoverPhoto { get; set; } 

            /// <summary>The layout of the cover art. Possible values include, but are not limited to, the following
            /// values: - "banner" - One large image banner.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("layout")]
            public virtual string Layout { get; set; } 

            

            /// <summary>Extra information about the cover photo.</summary>
            public class CoverInfoData
            {
                /// <summary>The difference between the left position of the cover image and the actual displayed cover
                /// image. Only valid for banner layout.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("leftImageOffset")]
                public virtual System.Nullable<int> LeftImageOffset { get; set; } 

                /// <summary>The difference between the top position of the cover image and the actual displayed cover
                /// image. Only valid for banner layout.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("topImageOffset")]
                public virtual System.Nullable<int> TopImageOffset { get; set; } 

            }    

            /// <summary>The person's primary cover image.</summary>
            public class CoverPhotoData
            {
                /// <summary>The height of the image.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("height")]
                public virtual System.Nullable<int> Height { get; set; } 

                /// <summary>The URL of the image.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("url")]
                public virtual string Url { get; set; } 

                /// <summary>The width of the image.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("width")]
                public virtual System.Nullable<int> Width { get; set; } 

            }
        }    

        public class EmailsData
        {
            /// <summary>The type of address. Possible values include, but are not limited to, the following values: -
            /// "account" - Google account email address. - "home" - Home email address. - "work" - Work email address.
            /// - "other" - Other.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("type")]
            public virtual string Type { get; set; } 

            /// <summary>The email address.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("value")]
            public virtual string Value { get; set; } 

        }    

        /// <summary>The representation of the person's profile photo.</summary>
        public class ImageData
        {
            /// <summary>Whether the person's profile photo is the default one</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("isDefault")]
            public virtual System.Nullable<bool> IsDefault { get; set; } 

            /// <summary>The URL of the person's profile photo. To resize the image and crop it to a square, append the
            /// query string ?sz=x, where x is the dimension in pixels of each side.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("url")]
            public virtual string Url { get; set; } 

        }    

        /// <summary>An object representation of the individual components of a person's name.</summary>
        public class NameData
        {
            /// <summary>The family name (last name) of this person.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("familyName")]
            public virtual string FamilyName { get; set; } 

            /// <summary>The full name of this person, including middle names, suffixes, etc.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("formatted")]
            public virtual string Formatted { get; set; } 

            /// <summary>The given name (first name) of this person.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("givenName")]
            public virtual string GivenName { get; set; } 

            /// <summary>The honorific prefixes (such as "Dr." or "Mrs.") for this person.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("honorificPrefix")]
            public virtual string HonorificPrefix { get; set; } 

            /// <summary>The honorific suffixes (such as "Jr.") for this person.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("honorificSuffix")]
            public virtual string HonorificSuffix { get; set; } 

            /// <summary>The middle name of this person.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("middleName")]
            public virtual string MiddleName { get; set; } 

        }    

        public class OrganizationsData
        {
            /// <summary>The department within the organization. Deprecated.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("department")]
            public virtual string Department { get; set; } 

            /// <summary>A short description of the person's role in this organization. Deprecated.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("description")]
            public virtual string Description { get; set; } 

            /// <summary>The date that the person left this organization.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("endDate")]
            public virtual string EndDate { get; set; } 

            /// <summary>The location of this organization. Deprecated.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("location")]
            public virtual string Location { get; set; } 

            /// <summary>The name of the organization.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("name")]
            public virtual string Name { get; set; } 

            /// <summary>If "true", indicates this organization is the person's primary one, which is typically
            /// interpreted as the current one.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("primary")]
            public virtual System.Nullable<bool> Primary { get; set; } 

            /// <summary>The date that the person joined this organization.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("startDate")]
            public virtual string StartDate { get; set; } 

            /// <summary>The person's job title or role within the organization.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("title")]
            public virtual string Title { get; set; } 

            /// <summary>The type of organization. Possible values include, but are not limited to, the following
            /// values: - "work" - Work. - "school" - School.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("type")]
            public virtual string Type { get; set; } 

        }    

        public class PlacesLivedData
        {
            /// <summary>If "true", this place of residence is this person's primary residence.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("primary")]
            public virtual System.Nullable<bool> Primary { get; set; } 

            /// <summary>A place where this person has lived. For example: "Seattle, WA", "Near Toronto".</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("value")]
            public virtual string Value { get; set; } 

        }    

        public class UrlsData
        {
            /// <summary>The label of the URL.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("label")]
            public virtual string Label { get; set; } 

            /// <summary>The type of URL. Possible values include, but are not limited to, the following values: -
            /// "otherProfile" - URL for another profile. - "contributor" - URL to a site for which this person is a
            /// contributor. - "website" - URL for this Google+ Page's primary website. - "other" - Other URL.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("type")]
            public virtual string Type { get; set; } 

            /// <summary>The URL value.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("value")]
            public virtual string Value { get; set; } 

        }
    }    

    public class Place : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The physical address of the place.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("address")]
        public virtual Place.AddressData Address { get; set; } 

        /// <summary>The display name of the place.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>The id of the place.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Identifies this resource as a place. Value: "plus#place".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The position of the place.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual Place.PositionData Position { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
        

        /// <summary>The physical address of the place.</summary>
        public class AddressData
        {
            /// <summary>The formatted address for display.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("formatted")]
            public virtual string Formatted { get; set; } 

        }    

        /// <summary>The position of the place.</summary>
        public class PositionData
        {
            /// <summary>The latitude of this position.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("latitude")]
            public virtual System.Nullable<double> Latitude { get; set; } 

            /// <summary>The longitude of this position.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("longitude")]
            public virtual System.Nullable<double> Longitude { get; set; } 

        }
    }    

    public class PlusDomainsAclentryResource : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A descriptive name for this entry. Suitable for display.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>The ID of the entry. For entries of type "person" or "circle", this is the ID of the resource. For
        /// other types, this property is not set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The type of entry describing to whom access is granted. Possible values are: - "person" - Access to
        /// an individual. - "circle" - Access to members of a circle. - "myCircles" - Access to members of all the
        /// person's circles. - "extendedCircles" - Access to members of all the person's circles, plus all of the
        /// people in their circles. - "domain" - Access to members of the person's Google Apps domain. - "public" -
        /// Access to anyone on the web.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class Videostream : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The height, in pixels, of the video resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("height")]
        public virtual System.Nullable<int> Height { get; set; } 

        /// <summary>MIME type of the video stream.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>URL of the video stream.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>The width, in pixels, of the video resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("width")]
        public virtual System.Nullable<int> Width { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
